package formula.web.twork;

import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExceptionHandlerWrapper;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public abstract class AbstractExceptionHandlerWrapper extends
		ExceptionHandlerWrapper {
	// Constantes
	/** Version extraite du gestionnaire de configuration */
	public static final String CLASS_VERSION = "$Revision:   1.0  $";
	//
	// Attributs
	/** Support permettant d'employer le mécanisme de trace */
	/** Gestionnaire d'exceptions masqué par cette façade */
	private ExceptionHandler mWrapped = null;

	private Log m_log;

	public Log getLog() {
		return m_log;
	}

	/**
	 * Crée une nouvelle instance permettant d'établir une façade sur le
	 * gestionnaire d'exceptions précisé
	 * 
	 * @param originalExceptionHandler
	 *            gestionnaire d'exceptions qui sera masqué par cette façade
	 */
	public AbstractExceptionHandlerWrapper(
			ExceptionHandler originalExceptionHandler) {
		super();
		m_log = LogFactory.getLog(getClass());
		//
		setWrapped(originalExceptionHandler);
	}

	/**
	 * Gestionnaire d'exception masqué par cette façade.
	 * 
	 * @param handler
	 *            la valeur à positionner au sein de la propriété
	 * @throws NullPointerException
	 *             soulevée si la valeur est <code>null</code>
	 */
	protected void setWrapped(ExceptionHandler handler) {
		if (handler == null) {
			NullPointerException nullEx = new NullPointerException(
					"Property [wrapped] cannot be null");
			if (getLog().isErrorEnabled())
				getLog().error(nullEx);
			throw nullEx;
		}
		//
		mWrapped = handler;
	}

	/**
	 * Gestionnaire d'exceptions masqué par cette façade.
	 * 
	 * @return la valeur positionnée au sein de la propriété
	 */
	@Override
	public ExceptionHandler getWrapped() {
		return mWrapped;
	}

}
